package com.x.Part4_同步方法处理线程安全;

/**
 * ClassName: WindowTest_extends
 * Package: IntelliJ IDEA
 * Description:
 * Written by HanXu
 * Create 2024.03.27 16:27
 */
public class WindowTest_extends {
    public static void main(String[] args) {
        Window1 w1 = new Window1();
        Window1 w2 = new Window1();
        Window1 w3 = new Window1();

        w1.start();
        w2.start();
        w3.start();

        //Thread.sleep()是一个静态方法
        // 它会使当前正在执行该方法的线程进入休眠状态
        // w1.sleep(1000*3);这一行实际上是对主线程进行休眠，而非w1对象自身
        try {
            w1.sleep(1000*3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("你好");

    }
}

class Window1 extends Thread{

    static int ticket = 100;
    static boolean isFlag = true;


    @Override
    public void run() {
        while (isFlag) {
            show();
        }
    }

    /*public synchronized void show(){//此方法的同步监视器为this，由于Window1类的实例不唯一，所以this不唯一，所以线程不安全*/
    public static synchronized void show(){//静态方法的同步监视器是当前类本身：Window1.class，唯一
        if(ticket>0){
            System.out.println(Thread.currentThread().getName()+"票号为：" + ticket);
            ticket--;
        }else
            isFlag = false;
    }
}



